@L}5 _$% l0$)$$Hȱ$ UhL" `e$$%`$%`  R@P!( L(1   Y I`  d  Ld M * @  $ % CC$$)%1 Udߥ$9%: !0 S$% DD˙`  }J)Lr   Ѝ  R S0{ 8Sݘ ` B V=>?w   BD!EHI V}Lx sǸsǻss!!BADCOPY D D LK$ L#Ӆӥ Vӥ`}Ӆӥ \ӥ`DE =ө B(HI V` }CALC MAGIC RUNS ON XL'S OR XE'S ONLY. }CALC MAGIC NEEDS 64K R}AM, PLEASE UPGRADE }PLEASE REMOVE CARTRIDGE AND REBOOT }W !RONG LOAD FILE! }ERROR ON LOAD, PRESS SYSTEM RESET~r}߈u~r߈u~r߈~rߩ0! U"  L#>!M! U"ߩ\! U"Ω B. }D"E'HI ! BD"E'HI !  !"   l  Please press any key to start  } HEhD8DɛBJ ! *H B ! h !L#`ޢ }DEHIB l#0֩+&DEHI l#"#ЪL"L"DHEh }DEL"8HIHI" l#L" i#L"lDEHIHI ! 08 }` [ ҝ!#w  Ӆhhh#HHHH#$ӥ(LHHHӥ@Ӆhhh}$H0HHHӥ(LHHHӥ@LH <ӭ@H@)㨌hH@!@@@h@hӥ@ө} $Y0 L# $ $ą $ Lt $ $ $$˩Ԡ L#ʭ $%,` w }当(@#-$H$Hxx ?)H)h)Ӎ# $C$} hXL%ʎR BϝD%EĝHI ! Lk!} %&㮛 by} Dave Middleton (C) August 1985 Antic. Converted by J. Turner & D. Scammell } Editing keys:- OPT- Point to cell sOPT- Re-calculate SEL- UP 1 line sSEL-&' UP 20 lines STA- GO or P}opup sSTA- Exit HLP- DOWN 1 line sHLP- DOWN 20 lines Esc - re-edit cell Functions:- @AND @ASSIGN( @COUNT( @G}OTO( @IF( @IFGOTO( @LOAD( @LOOKUP( @MAX( @MEAN( @MIN( @NUMBER( @OR @PRINT( @'(PV( @QUIT @SAV}E( @SQRT( @STD( @SUM( @TEXT( @VAR( Text cell formats:- > right ^ centre # program title Naming ranges}: [NAME]A1,A20 00x00~ 8Sݘ ` B V=>?w   BD!EHI V0d M * @  $ % CC$$)%1 Udߥ$9%: !0 S$%} DD˙`  }J)Lr J  ((  p L ()   J}L= ( L 0q A    IB JC;? D W } LL  ` W )LA!  ߰")-݆ p" } $G@LL 08`Q")<2Q0 -G$Ș݆ UL# ; p8(()(0ʥ)NQ`}$GȘ݆LU )L ݆ L GȘ ݆LL )W>Z   HH)H }p h  hyhy D L> L JJ    ! LA*` BF}7'8  M HN H` 8 Z  \LdJJ!"! GFE@F (!L }EE !E^ ^ E E7EȩEdE/EȩE  D!} .L }  ;F d  ;?F7F? ( .   Z D LL d "} . D  L    p  E` , d)  D L) 0BM݊L݉#} ML  N݆ L NLML [ TEqEHȱEqEh 0Gȹ G$} HLL GɛL  LFREE SECTORS G) *Gȩ GȽG GȌ*jj >G%} C8jJ3j2CD( C202C ԠBX` N 1? l LlD:RAMDISK3}.COMLu L1 L ;LHL  T`  `8  ɐ     `TU 4} L ? .  t`GBJ ~DEHI B V0dV5}QDEHI VF9 ,0 ,0 s0hhL  L` H hDHEh6}DEL8HI4 0 HI,0 0  9 .G VLO7},0 L4*IJ`llD1:AUTORUN.SYSNEED MEM.SAV TO LOAD THIS FILE.D8:MEM.SAV J y08 B|DEHI8} V0 0`B;DEL`?<0LV`@ʆ v s? F0Ξ05: [ BDEHI9} VY8 B V  @  /DE `E:D8:DUP.SYSERROR-SAVING USER MEMORY ON DISKTYPE Y TO :}STILL RUN DOS B;DE J  (` 9 V⪍ ઍ  -;}LLu ÝDEHILV 9 .l 9 .l  `` s$B BH<}I|DE V BLV nB,DE JLV B V BLVDEIʩ BꭝLu }K$A% % % % D s멐 B ! B?D%EJ ! ֩  ɩSҩϩ"Щ>}хӅׅ΍pr(dr r ` L өӢ莾L h $  % `D1:*.?MSD1:*.DIFD1:P:?}K:)rrr H)JJJJrh)r`ȩr`H)rh)rr H)JJJJrh)r`r@}r`rr`,r<`,&9'\% % Ȣ05 ,)!   `0L|&L K}ߩL, ` \% , 506 ȄHH< < << hhL'  ,L}űL^5,, L, ,󄱤:'5(Hh 5 )悢=ĂL 1'@ # < <0 (M}<" rr < rL&H 1' (hȽHS}H o 馂 50ii = { ",hh`L, i,] ꩀr 5.0, = o {r͝rr DrT}(( ", ` 5 = L*L, i,[  5.0, *+%,= o {r͝rr Dr(( ", `U}1< 5 = LU+L, \% , f i, \ ,WȄ 540 +L+) 5ў ĵL+ ",L( ,V} &L(L, = o 50 = {r͝r } ",L(L+EI&,!-E悥ń惥Ņ8`` i,L*W}LL ,. $ , łŃ`8` Hȱh`8`H L,X} 0  =h(h ,L% ɛ @(@E"-. C- cɋɇ@('` 35-Y} 3124 -%!. #/5.4 -). -!8 )& '/4/ )&'/4/ !33)'. 06 .5-"%2 02).4 !.$ /2 4%84 ,/!$ 15)4 34$ 6!2 3/24 ,//+50 3Z}!6% ^B=FjNgn?<x*()*+*&((&(',%%'(*)7+..,ڥL1L}/ ED BIHL! <<<8d<<[}<8 <<< 0<<0<0<<<<`< ..0<,<< .`2 .2 .2 .3 . .2\} .3 . .2 .3 .3 .2 .`)./ = ˢ<<`)8>Ƈ]} <񆇩<<`eHeުh`S  >4L0 ɩ8嵨ȥ8嶪Hh^}ۆ .3 .3 . R/ 53$ .2 .L90H3$ .h /L//0 . < <i< ǝ<򩛝;< ._}3 .泥L/津L/3 .3( .L<ʊ EDBII ! L<`<ɛ р8`< `0H`}<<<;, )<<<i <id`ۅܢ< `02 010Lz1< `0< `0< `03 0 0L13 a} 0 0L13 0Ǣ< `0< `0< `03 0< `03 0 8`< `0 2=<" I=b}LQ2LU2< `04+ųŴŸ Q5L5åŴ 4L5 5L5`L0⦵䱐Ĵ IJhhL0䷐঵ĸ`8i}e 4 m즱 5H C5 5h $565 氥Ÿ浥ų`)=`8e 4 m즱 5H C5 5hj} 5 毥ŷ涥Ŵ`8e8e 4HHH Q5hhh汥ų`L= )=<k}`ű 8寅L 68居 67Ų 8尅L;68岅=< = q=0Zu<ȥ=<ȩ=l}L6 8=0b`L6=eS<ȥ 8=CL6=e84LmL0D  >4LLL0 , 78 i,L,LU7<  >4 `  3L0⥵ J8 5D<<n}<< 7Lz7 + U81<ŃO1< 5U 5<HhHh悥ń𳐱3< W8Ņo}L馂1< 5QO)拥 ",< 53189)懠ў ćċӥ14`L0⩮r 0 L9`0%ȱ%: ;L9 %<9y`= :`Le$9 :`` ^;ŎF .t}:, ;qrsr8厪Tr8(反trmqrqrmrrrr L0 ^;œ8ɒ .:A, ;qr8吪uru}8呍vrvrqreqrmrrrr L0  L0 ;L0  ;;; L񩐅(``L0;?% L0?%v}L2; ) L2;L0) L2; ;* c Lm;ɑ Lm;ɝ xLm; Lm;ɇ  ɋ`jeũ#Ʃw}] : J⥊ ǩL6ɩ? %<hh` ȩ ʢ< }` ɢ ]QLV ]?r ]rťɮ ] YŤťL<ʩS  >4L0 ɩr 0 }Lɠ ] YƉLL< ǩL6ɩ s ƤNV Ƥ>? Ɲr*񩮅r Ʀᆄ Y} L Mˠ Ʀ<) ƙ<<< G<< L<ʥɈ`)'iHJJJJ h )ة }, L%H8%<< . L  < < .< <i<<;h`̥,`ȱ <ĉ`ȥń8JeLxȥń}e8優Lx˅ȱ =)L< ː<<䈐`r) r`)r) )@} , <ȥ)) ) ,H,<ȭr<ȥO<έr慽r <έr)r  <(0 <}ńr")@ <*) $d<ȩr<) cꥦ)@<ȥ)<Ȅ8r08`Ý<8 Υ}8`LfͩLfͩLfͩLfͩLfͩLfͩLfͩLfͩ@Lfͩ Lfͩ0 9L 9L%υϘυL:} %< LL0LͩLͩߠ LͩߠLͩ@Lͩ0 9L 9L%ЅИЅХ,L L0 b}rr 你reiέr` Υȅ <Ĉ`cDϭ*U`IDϬ ҭ)} )? DύDϭI*) DϪΠ " `BHI ! H* @ h%``} }~_`{,ȤɈ*ʈ*ˈ** e' 8'̤ə,}J nͤͱ` oª T ɘ*L  P A ` cɇ)ɋɈ(Ɇ>Ʌ Lȩ}` Ä` A PZ  AЩ О A8( A`х©àȱ…Ȅ`eʅi} P`eʅ`̈ ILC`(ee` E Q GLP ^ͱ D A GLP LPC Z GL,R G`}ĩL᪩ĩŠɛ` LP| G̰ɛ G̰ GI̩|LG` ɽ.Ƚ.˽.ʽ.}ɪ L6ɽ*Ƚ+˽,ʽ-L&⑚`JE 5ʩL JLYǢ JLɢ JLH âT L 9 A9}1),,,,,, , , ,,,,, 5Lɾ},n/#Dfv$`bT[*18F*?M#34;9:.<=>?@}DE>ADGJuL8*ASST*VW^%\]^j`abcdefghijklmnFAopqrstuvwx33463:6;8888::;:7};;;;;.. MZKR ; ().-&'}( !)"#+-%,./0().-&'A ().-&'A5B687&12@ABC_FHIJMON[PQYXUyzX\}y{|z{|奈 ee`d=*=ΰΥLĤι=;L륣L< <Ά}=  L j :L <ŋƂ ` 馃=4 LL䙠rr= " grLb}=[ rL}  魭r r Ąr 椅Ą  榃`,,L!O;K)} =!#;?覃=)e L)楃 C楇 ʆ `8`L = eiLO` 4}`  `<<<`)`8`H΅ł ł h ,hhhh` i<э<=<` 膈K-}04 =弄ʆ L g 惦ƩL L籞0 d=`)r r}=ȩ=έrr =έrC虀===L2=ȱ8= == = =ȱ ZȄ<})?=ȹ<ЧȱK-  gLƅL豆=ȱ L2  4NhD?8rr08rr}`8`ʽrrrƻ`ʽrrr`r rrrMrB D 魎rr8rrr a R魭rr έrr} ` D 8rrr a f魟r {r`rrrr`rr r`rr r`@;rr r`}8rr)r`r}ri)r`r`r0 | L 餼rƻ0r}ri)rL {}rmrr 魎rMrr`rr έr L`r`r r L |L Lꭑr ?r <ꦼ8rr)}r覼r}ri)r ,饻ļrļп8rrrrr {Lꭠrr έr LL릒,C?;7}<<ĺ乐 5 Yr`rťŤ`})ȱŹȱź 5ȥeiL멮rť Ť`H)hEȱ;;== ĉт}"=ĉȦ α=ĉeiL`r 0 Lu` ei   L} Y `ƉL쥄L륃ť Ť`)ȱŵŷȱŶ Ÿ``ee` 5ȑ`H }բyr h c5.d IHhH! < 5Lt h L>Ka  L;=`}=w,@== h(` =+Ll裂=dd iŠ`}LAšơƠ`Lx LJح=L = f. C=! ƥ å)߅L 5é '}h L L hhhh`Ν< <L âʩ˩ Lॢ \ Lr΅`d=H== }==h=L` ==i`=ɀ=LH h) `8 `8i@ \Lr \ L \ xLr異LA \ }Lr異LA \ Lr \ .Lr \ MLr異2yr =ɀɀ)= L L` Ƃ} 8􊦠 =襂 = Z<ɀ=Ƃ==` =hhhhhh` hhhh LS`}d Lfhhhh,LS ==L=` 𦒤 5)}=`L. hhhh[LS` }~=L @ L# H #h` ,[_奮 ?5rf?:  }; z'@h OLTrreșTr襔ŏȩTrʆe`ԭOƍQƍPƍ 񥐅}%ӅL Ӆah<rJe8 <襕 <yrė(ä< (ei}ɑ{v Z <春řʥ L`H )@,,ፐh)?,㍑` = @}(򦒤LHqrhqr`8 @襕 @ Z􊨢<ɀ@𩀙@` c v L}LwrŎ Ǝ)AAsrƒ`Ő ƐurƓ`ƙř 搥ur`ŗ`撦}rŏ}膎)AAsr`ŐŎ `)AA )Ɂur`sr`ƙř 晥ur` `}<<}` ```o``x.M:u#ommand-enu7orksheet#ommands2ange#ommand}s'oto#ell&ormat#ell$elete2ow#ol)nsert2ow#ol%8)4#olumn 7idth2ange#opy2ange%rase2ange&ormat2ange3ave2ange},oad$isk#ommands3heet#olumn 7idth#lear3heet2ange0rint3ave3heet,oad3heet0rinter3etup"reak'lobal&ormat3pl}it3creen$elete#olumn$elete2ow)nsert#olumn)nsert2ow2angeto#opy&rom2angeto#opy4o vesign parenthesiscrdr}notationdollarsHpounds3plitat2owsignonzero suppression0recision .egativevalues#urrencysigns3elect}positionforsplitpress'/currencyoffsignoffsign comma commaon commaoffshowzerosblankzeros2angeto"}lank2angeto&ormat6ertical3plit(orizontal3plit#lose3plit3wap/ver3yncronisedmovement9esor.o.umberof$ec}imalplaces  2ange3ort2angeto3ort2eally#learthe3heet9esor.o2eplace3heet%nter9esor.o7orksheet.ame}charmax 2eplace3heetplot plottingonplottingoff2ange4o0rint%nter0rinter#odes3tartof0rint3plitat}#olumn%ndof,ine%ndof0rint#hange#olour%nter#olour#odes2e #alculation!utomatic-anual"y2ow"y#olumn&ormula}or6alue2angeto3ave5se#232toadjust#olumn7idth&ormat$isk2eally&ormat$isk9esor.o$elete&ile6alid}ate$isk&ree3pace0rogrammed3elect/ption%nter0age7idth0age7idth#olumnto3ort3top+eyor0rinter%rror}2ange%rror%guse! + 5neven"rackets 5nsureofmeaning#ellsare!to:only5nknown&unction.u}mbertoo,}arge4oomanydecimalpoints)&%rror5se)&test true false '/4/cannotjumptoitself'/4/%rror%guse'/4/! )&'/4/}canonlygotoacell.umberorcelladdressonly!33)'.todifferentcell.umbersandcommasonly.umbersbetween ~y}only/nlycodesallowed0ress'/& to#ontinue06formatis06amount  duration 0romptwithatextcell4he3heeti}s&ull"ackgroundcolourmustbeunique%rrorin-aths3topkeyor0rinter%rror3aveas$)&file,oada$)&file"yrow"z}ycol%ntertargetcell%22/2&/5.$"54)'./2%$2ange%rror%guse! + 5neven"rackets 5nsureofmeaning#ell}sare!to:only5nknown&unction.umbertoo,arge4oomanydecimalpoints)&%rror5se)&test true false '/4/canno}tjumptoitself'/4/%rror%guse'/4/! )&'/4/canonlygotoacell.umberorcelladdressonly!33)'.todifferent}cell.umbersandcommasonly.umbersbetween only/nlycodesallowed0ress'/& to#ontinue06formatis06amo}unt  duration 0romptwithatextcell4he3heetis&ull"ackgroundcolourmustbeunique%rrorin-aths3topkeyor0r}inter%rror$isk%rrorK$l4he3heetis&ull"ackgroundcolourmustbeunique%rrorin-aths3topkeyor0r&K$F% % % % D J%쩦 B ! BGD%EJ ! ֩  ɩSҩϩ" }ЩхӅׅ΍B(dAA@ A ` L өӢ莾L h $  % `D1:*.?MSD1:*.DIF }D1:P:G%%K:FBӢ@ %ɀ٥`A`ʥ 8 Ӆ㆝&i@ } ӱ`ө``%&,OAKGC??ĺ乐 %?H0 ??h)ө }ө`ӥiei8傩僰  && ƩL/?` %0ȱL }&υЅ` &L'FBťŤ&'`)ȱŹȱź %ӥȥeiL&FB }ť Ť`H)hEȱ;;@= ĉт"=ĉȦ 'α@ĉeiL''`FB } '0 .(L'` <(ei ' <( .('R(L' % ƉL'L&ť Ť`)ȱŵŷȱ }Ŷ Ÿ``ee` %ӘȑHh`)EBDB7B H)JJJJ7Bh)7B`ȩ7B`H) }EBh)DB7B H)JJJJ7Bh)7B`7BB`7B(B`,7B?`,?7B`)`8` }`Ǻ  ǽ`LL @L o 4H {L)h`BȄh }LSL { 5BI5B L{ L{ 養LL/ hhLS( hhL 鱽%ԥ }7B7BȭDBEDB`  0ȱЕȱȘH %0 =hLHǢ7BȄh`EB DBȢ7B } 7B `EBe 8BLr` r o {(B&B5BL8B `6B'B B(B`ʩ˩ ȩd }?@ %_)Sii8̐̅| GĈ ̰ G| G Pd?d?d?惦В o }a?ȄƢ@L``)@L¥)4Ʀ íEIEŹƥźՐ`Ʀ íEIEƥź }ŹՐ` % 0 ) ` %22/2"ƅ3L8夅ii i`ąeą ,ĥ  }`)8儅充(`(ߥeeƈ`d 'S(N) ȱȽ00 L ǽ `L }( H ( h`LI)  8`,,` ( (` o ( {&B5B'B6BB(B &&B5B }&B D&B((,,% ȱ x(L( (L(ȥ`L/ O)J*m( ( Ȣ05 , })!   `0L)L ȱߩL/ ` m( / %06 ȄHH? }? ?? hhL+  /űLo8,, L/ /󄱤K*F+Hh % ')悢 }@ĂL B*@ ? ?0 (ȭ?" 7B7B ? DBL)H B* hȽ?D8 }?働???򤂱 Ȅ /L:* & %LY ( /Ld+ /  /G+B,Ld+ L/@Ll+ / } 1$hhhh) `hhhh Y)LQLé , L/ )` )T ) F ͥA oB'B { }{ oƈ { o ꤊ`L/ ` m( H o {)B6B ,L,ABDBEB,C,>-EB 8EB }  o , o {  { o o , 惥˥0 EBL, {h` {)B`7B` o- o V- }{ ꤊ`H)JJJJ8Bh)9B` , 馂 %:08 = o { 5BI5B o { o { ?-:. 3/ L }, ,L, o- 饉 , ,EBL z/>HH o 馂 %0ii = { 3/hh`L/ z/] ꩀ }DB %.0, = o {&B5B&B D&B(( 3/ ` % = L.L/ z/[  %.0, ;.6/= o } {&B5B&B D&B(( 3/ `1? % = Lf.L/ m( / f z/ \ /WȄ %40 /L.) } %ў ĵL. 3/L$+ / )L$+L/ = o %0 = {&B5B } 3/L$+L.EI7/20 }E悥ń惥Ņ8`` z/L-LL /. $ / łŃ`8` }A Hȱh`8`H N %L/ 񦒤 P@h(h 0L% ɛ @(@ }E301 T0 /ɋɇ@('` 35- 3124 -%!. #/5.4 -). -!8 )& '/4/ )&'/4/ !33)'. 06 .5-"%2 02).4 } !.$ /2 4%84 ,/!$ 15)4 34$ 6!2 3/24 ,//+50 3!6% oS$NW*{_xPM -,,-.-)++)+*/((*+-,:.12,ڥL4L }2 ED BIHL! ???8d???8 ??? 0??0?0????`? ?10 }?,?? $1`6 $16 $16 $16 $1 16 $16 $1 16 $16! $16& $16 $1`)2 3 =A }ˢ??`)8>Ƈ ?񆇩??`eHeAުh`S O7 }L0 ɩ8嵨ȥ8嶪Hhۆ 160 $16, $1 c2 %65 $16 $1LJ3H65 $1h )2L3 34 2 } ? ?i? ǝ?򩛝>? $16* $1泥L2津L260 $169 $1Lʊ EDBII ! } L`?ɛ р8`? q3H???>, )???i ?id`ۅܢ? q36 4 }53L4? q3? q3? q36 3 3L46 3 3L46! 3Ǣ? q3? q3? q360 3? q36, 3 }8`? q3 5@?" @Lb5Lf5? q3?VLb5 5?ɛ- .0: @ީ@Lf5} } 557L0ʢ Ją ɩ 3L5ޅ߅? q360 3L565 3L4?0 ?,L4 c2L5 } L5 5L*5洩L*5 &΅Յ؅ ݩ`L%@d`? q36, 3L569 3L5Lb5 5å? 6 }~ 0 /5<6LTABLE0,1""VECTORSTUPLESDATA0,0VBOT-1,01,0EOD=687,T 0 /ɝ. ɋɇH }HHHLN즒A%ӥL6AL6A @AA YLL6 ??A ?` 08` @ 6#? } %勒Ň N %L6?L` 6D??? A ? űH9748hŲHh`8` 6?? }?A ?L|7L7ŵHhŶHh` 75 O7+ųŴŸ b8L5åŴ 8L5 8L5`L0 }䱐Ĵ IJhhL0䷐঵ĸ`8e 7 ' %H T8 8h 58098 %氥Ÿ浥ų` })@`8e 7 ' %H T8 8h 8 %毥ŷ涥Ŵ`8e8e 7H }HH b8hhh汥ų`L@ )@?`ű 8寅L198居19,:Ų 8尅LL98岅 }@? @ q@0Zu?ȥ@?ȩ@L9 8@0b`L9@eAS?ȥ 8@CL9@e8?LY9?) }ȹ@L9?ȹ@?L9?,L9` @?`3 O7L'L0D O7LLL0 / -:(; z/L/Lf:< } O7 ` 7L0⥵ k; %D }%ȱ%L= ?9y`= 7=`Le$9 7=`` >ŎF O=, 4> B B8厪A8(反 Bm B Bm }B B YL0 >œ8ɒ O=A, 4> B8吪 Bʆ8呍BB Be Bm B B YL0 Y }>>L0 '>L0 4> LY祖(``LQ>?% BL0?%օLS> ) LS>L0) LS> '>* 0 Y / } 6L>ɑ L>ɝ L> NL>ɇ  ɋ`jeũ#Ʃ] 7= J⥊ ǩL9ɩ? ?hh` ȩ ʢ? L` ɢQL ]?A ]A ]T }LLʩS O7L0 ɩFB '0 .(Lɠ ] %ƉLL ǩL9ɩ J% Ƥ-? ƝA } ƝATL L LLY ɠ Ʀ?) ƙ??? &?? %LʥMɈ`)'iHJJJJ Oh  })PNة 0 L%H@%?? . L  ? ? .? ?i??>h`˥ },`?H?H?H E % Zh?h?h?@?`)8A2>ȱ ?ĉ`ȥń8J }eLDȥńe8優LD˅ȱ =)L ː??䈐`EB) 7B`)DB !}) )@ , ?ȥ)) ) ,H,?ȭEB?ȥO?EB慽7B ?EB)EB  ?( "}0 ?慥ńDB")@ ?*) $d?ȩr?) cꥦ)@?ȥ)?Ȅ8A08`Ý? #}8ͥ8`L2ͩL2ͩL2ͩL2ͩL2ͩL2ͩL2ͩL2ͩ@L2ͩ L2ͩ0 =L Ʌ )} Lȩ` Ä` A PZ  AЩ О A8( A`х©àȱ…Ȅ` *}eʅi P`eʅ`̈ ILC`(ee` E Q GLP ^ͱ D A GLP LPC Z GL +},R G`ĩL᪩ĩŠɛ` LP| G̰ɛ G̰ GI̩|LG` Yɽ. ,}.˽.ʽ.ɪ L6ɽ*Ƚ+˽,ʽ-L&⑚`JE 5ʩL JLYǢ JLɢ JL âT L < -} A91),,,,,, , , ,,,,, 5L}=n@DGfvE. '^*  .}34\!9:?<=>?@xDE>ADGJuLYKbtST*VW^F\]^j`abcdefghijklmnFAopqrstuvwx667:6=:>;<;; /}==>>:>>>>>11 MZKR ;  0}().-&'( !)"#+-%,./0().-&'A ().-&'A5B687&12@ABC_FHIJMON[PQ 1}YXUyzX\y{|z{|奈 ee`d@*@ΰΥLĤι@;L'L 2}? ?Ά@  L j :L ?ŋƂ ` 馃@4 LL8BEB@ 3}" g8BLb@[ 8BL}  EB 8B Ą8B 椅Ą  榃`,,L 4}!O;K) @!#;?覃@)eA L)楃 C楇 ʆ `8`L @ ei 5}LO` 4`  `???`)`8`H΅ł p률ł 0h 0hhhh` i?э?@?` 6}膈\004 @弄ʆ L 惦ƩL L籞0 d@`)EB  7}EB@ȩ@EB7B @EBC虀@@@L2@ȱ8@ @@ @ @ 8}ȱ Ȅ?ɀ)?@ȹ?Чȱ\0  LƅL豆@ȱ L2  4NhD?8'B6B0 9}8B(B`8`ʽ(B)B(Bƻ`ʽ7B8B7B`&B 5BDB&BM5BB D &BDB8'BEB6B a REB8B :} EB7B ` D 8'BEB6B a f7B {EB`B(B(BB`8B7B 7B`BB B`@;) ;}B(B (B`8B(B)7B`B}(Bi)7B`B`(B0 | L 餼(Bƻ0B}7Bi)7 <}BL {6Bm'BEB &BM5BDB`EB8B EB L`7B`DB EB L |L L)B ?'B < =}ꦼ8B(B)B覼B}(Bi)B ,饻ļ7Bļп8'B6BEBEBEB {L8BEB EB LLH % >}բB 0h 0 /.d HhH! < L Eh 0L  E Lꦠ@ ?}`@,@@@ h(` @+L즠@dd iŠТ` @}L륢šơƠ`L %Lح@L E@ f. &@! %ƥ å)߅L 5é ' A}'h 6LI LI Nhhhh`Ν? ?L âʩ˩ Lॢ L΅`d@H@@ B}@@h@L` 릠@@i`@ɀ@LEH h) `8 `8i@ L N YL| LL C} 6LL L L L2B Y@ɀɀ)@ pLZ p LZ` Ƃ D}8􊦠 @襂 @ 񥒩?ɀ@Ƃ@@` @hhhhhh` hhhh L E}`d E Lhhhh,L P@@L@` E %)}@`L. %hhhh[L` Y ' F}ɖ @L @ |L H h` ,[_p!s3 DEST ADR INFRE RAM ) PSBLK @ B/BUF * HERE 20 + + ; : GTPAR ( SET UP DO AND PSBLK ) EBLK @ SBLK @ 0 PSBLK ! ; : MVIN ( MOVE BLOCKS INTO RAM ) GTPAR DO I BLOCK DISP B/BUF CMOVE 1 PSBLK +! LOOP ; : MOVOT ( WRITE RAM TO DISK ) GTPAR OFFSET @ + SWAP OFFSET @ + SWAP DO I BUFFER DISP SWAP B/BUF CMOVE 1 PSBLK +! UPDATE FLUSH LOOP ; : DUPLICATE ( STARTSCR--ENDSCR) 1+ B/SCR * EBLK ! B/SCR * SBLK ! EBLK @ SBLK @ - FREE 20 - 400 / > IF ." TOO MANY " QUIT ENDIF CR MVIN ." INSERT DESTINATION DISK " CR ." RETURN TO CONTINUE " KEY DROP CR MOVOT ; --> /"0?@35-@"`   @" @  "`@" @,/!$@"r} ? ? @ "   @ " ?&ilename@" ? @" @,/!$@"X"" /"0? "`>as>2!.'%2-3>4hisis>atest>range>sz}(ؿps%s" r "SPu}  d 'v}(35-"`   "  w} " ,/!$35-"`   "   " ,/!$&ilenamex}"   "   "    " "" /"0y}? "`"   "    " "" /"0aved>'" /"0? "`>as>2!.'%2-3>4hisis>atest>range>s PARAMETER800 0 8 00`,0'D800 H,ɛh`2L1NEED D1 THRU D8u LOOP ELSE DROP 0= THEN ; : CHECKIT ( addr --- F ) PAD 1+ PAD C@ MATCH ; : HEADER CR ." Searching for " 22 EMIT SPACE PAD 1+ PAD C@ TYPE 22 EMIT CR CR ." on scr #" ; : MARKSTRING ( scr# addr --- scr# ) OVER BLOCK - C/L / CR DUP CR CR ." Found on LINE#" CR CR . SPACE OVER .LINE CR CR CR ." scr#" ; : ?STCK DEPTH 2 < IF 0 59 PHYSOFF @ - ENDIF ; --> ( FIND 2/2 ) CODE ?CHAR ( addr --- addr F ) 1 # LDA, SETUP JSR, N )Y LDA, 1STCHAR CMP, 0= IF, 1 # LDA, PHA, 0 # LDA, PUSH JMP, THEN, 0 # LDA, PHA, PUSH JMP, C; : ONEBLK ( scr# addr --- ) DUP 400 + SWAP DO I ?CHAR IF I CHECKIT IF I MARKSTRING ENDIF ENDIF LOOP DROP ; : GTWRD 22 WORD HERE DUP C@ 1+ PAD SWAP CMOVE ; : FIND ( scr#1 scr#2 text --- ) ?STCK GTWRD 0 SCR ! PAD 1+ C@ 1STCHAR ! HEADER 1+ SWAP DO I DUP DUP SPACE . BLOCK ONEBLK ?CONSOL IF CR LEAVE ENDIF LOOP CR CR ." Search ended" CR ; ;S ( VERS1.4S KERNEL ADD 1/1 ) ( REZ / HES 15sep82 ) ( Already in kernel, doc.only) FORTH DEFINITIONS HEX 4F LOAD : NOT 0= ; : U. 0 D. ; : CN CONSTANT ; : (") R> DUP COUNT + >R COUNT ; : " COMPILE (") 22 WORD HERE C@ 1+ ALLOT ; IMMEDIATE : DEPTH EA SP@ - 2 / ; : .S CR DEPTH IF EA EA DEPTH 2 - 2* - SWAP DO I ? -2 +LOOP ELSE 1 MESSAGE ENDIF ; : SAVENFAs #LINKS 0 DO 1CFC 4 + I 4 * + @ 22 I 2* + +ORIGIN ! LOOP ; ( HES 82AUG21 ) CODE V1.4S ( DOSINI VECTOR ) E4C0 JSR, ( APPL.HOOK ) 0 # LDA, 52 STA, ( MARGN ) 27 # LDA, 53 STA, ( " ) 6 # LDA, 2C5 STA, D0 # LDA, 2C6 STA, 93 # LDA, 2C8 STA, ( SCREEN COLORS ) RTS, C; ;S ( FORTH-65 ASSEMBLER 1/6 ) ( WFR-79JUN03 ) HEX VOCABULARY ASSEMBLER IMMEDIATE' ASSEMBLER 2 + DUP 20 +ORIGIN ! VOC-LINK ! ASSEMBLER DEFINITIONS ( LOCATE EXISTING REGISTERS ) FF CONSTANT XSAVE 0FB CONSTANT W 0FD CONSTANT UP F8 CONSTANT IP F0 CONSTANT N ( LOCATE EXISTING CODE PROCEEDURES ) ' (DO) 0E + CONSTANT POP ( FROM COMPUTATION STACK *) ' (DO) 0C + CONSTANT POPTWO ' LIT 13 + CONSTANT PUT ' LIT 11 + CONSTANT PUSH ' LIT 18 + CONSTANT NEXT ' EXECUTE NFA 11 - CONSTANT SETUP --> ( FORTH-65 ASSEMBLER 2/6 ) ( WFR-78OCT03 ) 0 VARIABLE INDEX -2 ALLOT 0909 , 1505 , 0115 , 8011 , 8009 , 1D0D , 8019 , 8080 , 0080 , 1404 , 8014 , 8080 , 8080 , 1C0C , 801C , 2C80 , 2 VARIABLE MODE : .A 0 MODE ! ; : # 1 MODE ! ; : MEM 2 MODE ! ; : ,X 3 MODE ! ; : ,Y 4 MODE ! ; : X) 5 MODE ! ; : )Y 6 MODE ! ; : ) F MODE ! ; : BOT ,X 0 ; ( ADDRESS BOTTOM OF STACK ) : SEC ,X 2 ; ( ADDRESS SECOND ITEM ON STACK ) : RP) ,X 101 ; ( ADDRESS BOTTOM OF RETURN STACK ) --> ( UPMODE, CPU 3/6 ) ( WFR-78OCT23 ) : UPMODE IF MODE C@ 8 AND 0= IF 8 MODE +! ENDIF ENDIF 1 MODE C@ 0F AND -DUP IF 0 DO DUP + LOOP ENDIF OVER 1+ @ AND 0= ; : CPU C@ C, MEM ; 00 CPU BRK, 18 CPU CLC, D8 CPU CLD, 58 CPU CLI, B8 CPU CLV, CA CPU DEX, 88 CPU DEY, E8 CPU INX, C8 CPU INY, EA CPU NOP, 48 CPU PHA, 08 CPU PHP, 68 CPU PLA, 28 CPU PLP, 40 CPU RTI, 60 CPU RTS, 38 CPU SEC, F8 CPU SED, 78 CPU SEI, AA CPU TAX, A8 CPU TAY, BA CPU TSX, 8A CPU TXA, 9A CPU TXS, 98 CPU TYA, --> ( M/CPU, MULTI-MODE 4/6 ) ( OP-CODES WFR-79MAR26 ) : M/CPU DUP 1+ C@ 80 AND IF 10 MODE +! ENDIF OVER FF00 AND UPMODE UPMODE IF MEM CR LATEST ID. 3 ERROR ENDIF C@ MODE C@ INDEX + C@ + C, MODE C@ 7 AND IF MODE C@ 0F AND 7 < IF C, ELSE , ENDIF ENDIF MEM ; 1C6E 60 M/CPU ADC, 1C6E 20 M/CPU AND, 1C6E C0 M/CPU CMP, 1C6E 40 M/CPU EOR, 1C6E A0 M/CPU LDA, 1C6E 00 M/CPU ORA, 1C6E E0 M/CPU SBC, 1C6C 80 M/CPU STA, 0D0D 01 M/CPU ASL, 0C0C C1 M/CPU DEC, 0C0C E1 M/CPU INC, 0D0D 41 M/CPU LSR, 0D0D 21 M/CPU ROL, 0D0D 61 M/CPU ROR, 0414 81 M/CPU STX, 0486 E0 M/CPU CPX, 0486 C0 M/CPU CPY, 1496 A2 M/CPU LDX, 0C8E A0 M/CPU LDY, 048C 80 M/CPU STY, 0480 14 M/CPU JSR, 8480 40 M/CPU JMP, 0484 20 M/CPU BIT, --> ( ASSEMBLER CONDITIONALS 5/6) ( WFR-79MAR26 ) : BEGIN, HERE 1 ; IMMEDIATE : UNTIL, ?EXEC >R 1 ?PAIRS R> C, HERE 1+ - C, ; IMMEDIATE : IF, C, HERE 0 C, 2 ; IMMEDIATE : ENDIF, ?EXEC 2 ?PAIRS HERE OVER C@ IF SWAP ! ELSE OVER 1+ - SWAP C! ENDIF ; IMMEDIATE : ELSE, 2 ?PAIRS HERE 1+ 1 JMP, SWAP HERE OVER 1+ - SWAP C! 2 ; IMMEDIATE : NOT 20 + ; ( REVERSE ASSEMBLY TEST ) 90 CONSTANT CS ( ASSEMBLE TEST FOR CARRY SET ) D0 CONSTANT 0= ( ASSEMBLER TEST FOR EQUAL ZERO ) 10 CONSTANT 0< ( ASSEMBLE TEST FOR LESS THAN ZERO ) 90 CONSTANT >= ( ASSEMBLE TEST FOR GREATER OR EQUAL ZERO ) ( >= IS ONLY CORRECT AFTER SUB, OR CMP, ) CR --> ( USE OF ASSEMBLER 6/6 ) ( WFR-79APR28 ) : C; ( END OF CODE DEFINITION *) CURRENT @ CONTEXT ! ?EXEC ?CSP SMUDGE ; IMMEDIATE FORTH DEFINITIONS : CODE ( CREATE WORD AT ASSEMBLY CODE LEVEL *) ?EXEC CREATE [COMPILE] ASSEMBLER ASSEMBLER MEM !CSP ; IMMEDIATE DECIMAL ;S ( TILL figFORTH IS UP ) ' ASSEMBLER CFA ' ;CODE 8 + ! ( OVER-WRITE SMUDGE ) FORTH DEFINITIONS DECIMAL ;S LATEST 12 +ORIGIN ! ( TOP NFA ) HERE 28 +ORIGIN ! ( FENCE ) HERE 30 +ORIGIN ! ( DP ) ' ASSEMBLER 6 + 32 +ORIGIN ! ( VOC-LINK ) HERE FENCE ! ;S ( compile assembler 1/1 ) and editor SRC 7/6/80 ) BASE @ ( PRESERVE THE RADIX ) DECIMAL 31 WIDTH ! HEX 28 LOAD ( ASSEMBLER ) HEX 2F LOAD ( DECUS FORTH ADDS) HEX 27 LOAD ( VERS 1.4S KERNEL ) HEX 30 LOAD ( EDITOR & OTHER WORDS ) FORTH DEFINITIONS 25 CONSTANT LPWORDS 27 CONSTANT FORMAT DECIMAL LATEST 12 +ORIGIN ! ( TOP NFA ) HERE 28 +ORIGIN ! ( FENCE ) HERE 30 +ORIGIN ! ( DP ) HERE FENCE ! 1 WARNING ! ( DISK WARNINGS ) : TASK ; BASE ! ;S ( DECUS/FORTH MODS 1/1 ) : 1+! 1 SWAP +! ; : 1- 1 - ; : 0SET 0 SWAP ! ; : HD DUP 0A < IF 30 ELSE 37 ENDIF + EMIT ; : CHH DUP 0F0 AND 10 / HD 0F AND HD ; : CH? C@ CHH ; : HH DUP 0FF00 AND 100 / 0FF AND CHH CHH ; : H? @ HH ; : BDUMP 1+ SWAP DO I HH ." : " I 8 0 DO DUP I + CH? SPACE LOOP DROP ." \" CR 8 +LOOP ; : TBL ; : ALLOC DUP + ALLOT ; ( FOR RAM BASED SYSTEMS,) : ARRAY ; ;S ( FULL UTILITY LOAD REV H HES ) FORTH DEFINITIONS HEX ( VLIST patches HES17OCT82 ) : v1 ( patch beginning ) 1 2FE C! ; : v2 ( patch SPACE after ID.) 55 @ D < IF D 55 ! ELSE 55 @ 1A < IF 1A 55 ! ELSE CR THEN THEN ; : v3 ( patch last CR ) CR 0 2FE C! ; ' v1 CFA ' VLIST 6 + ! ' DUP CFA ' VLIST 55 + ! ' v2 CFA ' VLIST 95 + ! ' v3 CFA ' VLIST 9B + ! 800 ' DR1 2 + ! ( FX DR1 - 810) HEX 4C LOAD ( VAR/VALUE ) HEX 4A LOAD ( PICK/ROLL ) HEX 45 LOAD ( CASE ) HEX 46 LOAD ( CHRSET ) HEX 4B LOAD ( FIG 79 ) HEX 31 LOAD ( CIO/GRAPH ) HEX 36 LOAD ( PON/POFF ) HEX 37 LOAD ( RS 232C ) HEX 39 LOAD ( DISPLLST ) HEX 3B LOAD ( DRIVE LINK) HEX 10 LOAD ( EDITOR ) FORTH DEFINITIONS NOVERIFY GO 1 CHR ;S ( fig-FORTH 1.4S MODS 1/1 ) ( HES 82JUN17 ) FORTH DEFINITIONS HEX : BELL C0 0 DO 8 D01F C! 6 0 DO LOOP 0 D01F C! 6 0 DO LOOP LOOP ; : BINARY 2 BASE ! ; : BIN BINARY ; HEX : OCTAL 8 BASE ! ; : OCT OCTAL ; HEX : TASK ; : MSBYTE 0 100 U/ SWAP DROP ; : LSBYTE FF AND ; : MSB MSBYTE ; : LSB LSBYTE ; : >< DUP LSBYTE 100 * SWAP MSBYTE + ; CR ." CIO CALLS" CR 32 LOAD CR ." OS/HARDWARE" CR 33 LOAD CR ." GRAPH/SOUND" CR 34 LOAD FORTH DEFINITIONS : THERE MEMTOP @ ; : FREE THERE HERE - ; ;S ( CIO CALL ROUTINES ) 340 VARIABLE IOC 0 VARIABLE IOB : IOCB 7 MIN 0 MAX 10 * DUP IOB ! 340 + IOC ! ; : .IOC @ IOC @ + ; 1 .IOC ICDNO 2 .IOC ICCOM 3 .IOC ICSTA 4 .IOC ICBAL 6 .IOC ICPTL 8 .IOC ICBLL A .IOC I1CAX B .IOC I2CAX CODE CIO TXA, PHA, IOB LDX, E456 JSR, PLA, TAX, NEXT JMP, C; CODE Get XSAVE STX, IOB LDX, E456 JSR, XSAVE LDX, PHA, 0 # LDA, PUSH JMP, C; : GET 7 ICCOM C! Get ; : CLOSE 0C ICCOM C! CIO ; : OPEN 3 ICCOM C! ICBAL ! I1CAX C! I2CAX C! CIO ; CODE ACIO XSAVE STX, BOT LDA, IOB LDX, E456 JSR, XSAVE LDX, POP JMP, C; ;S ( OS & HDW CONSTANTS 1/1 ) FORTH DEFINITIONS HEX D200 CN F1AUD D201 CN C1AUD D202 CN F2AUD D203 CN C2AUD D204 CN F3AUD D205 CN C3AUD D206 CN F4AUD D207 CN C4AUD D20F CN SKCTL D208 CN AUDCTL 230 CN DLST 22F CN DMACTL 14 CN RTCLK 2F0 CN CRSINH 2F4 CN CHBAS 2C4 CN COL0 2C5 CN COL1 2C6 CN COL2 2C7 CN COL3 2C8 CN COL4 D01F CN CONSOL 2FC CN CH 2BF CN BOTSC 52 CN LMARGN 2FB CN ATACHR 2E5 CN MEMTOP 4D CN ATRACT 4E CN DRKMSK 4F CN COLRSH D40A CN WSYNC ;S ( COLLEEN GRAPHICS 1/2 ) 3A53 VARIABLE S: 1 VARIABLE COLORC 0 VARIABLE Qbase : PBASE Qbase @ ; : GR. 1 IOCB CLOSE 0 ICBLL ! DUP F AND SWAP 30 AND 10 XOR 0C + S: OPEN MEMTOP @ 1 + F800 AND 800 - DUP Qbase ! 17F + MEMTOP ! ; : POS. 54 C! 55 ! ; 0 GR. : LOC. POS. GET ; : C. DUP COLORC ! ATACHR C! ; : SPB HIMEM @ F800 AND 800 - DUP Qbase ! 17F + HIMEM ! ; : PUT 0B ICCOM C! ACIO ; : PL. POS. COLORC @ PUT ; 2FD CN FILDAT : SE. SWAP 10 * + SWAP 2C4 + C! ; : DR. POS. 11 ICCOM C! COLORC C@ DUP ATACHR C! FILDAT C! CIO ; : GRAPHICS GR. ; : PLOT PL. ; : LOCATE LOC. ; : SETCOLOR SE. ; : COLOR C. ; : POSITION POS. ; : DRAWTO DR. ; : CLEAR 0 0 POS. 7D PUT ; : XIO18 DUP FILDAT C! ATACHR C! 12 ICCOM C! CIO ; --> ( SOUND CONTROL / P/M 2/2 ) : SOUND 3 D20F C! 0 D208 C! SWAP 10 * + 100 * + SWAP 2 * D200 + ! ; : PADDLE 270 + C@ ; : PTRIG 27C + C@ ; : STICK 278 + C@ ; : STRIG 284 + C@ ; : RND D20A C@ ; ( 22F CONSTANT DMACTL ) D01D CONSTANT GRACTL D407 CONSTANT PMBASE D01B CONSTANT PRIOR D016 CONSTANT VDELAY 2C0 CONSTANT COLPM 26F CONSTANT GPRIOR PBASE 1 - HIMEM ! : PLAYER Qbase 1+ C@ PMBASE C! 3 GRACTL C! 2 - IF 1C ELSE 0C ENDIF DMACTL @ E3 AND OR DMACTL C! ; : HPOS! D000 + C! ; ( H-posn plyr# -> ) : SIZE! D008 + C! ; ( size-code plyr# -> ) : COLPM! COLPM + C! ; ( color plyr# -> ) : NOPLY GRACTL 0SET D000 11 0 FILL ; ;S ( PON/POFF 1/1 ) ( JDS 18jun85 ) FORTH DEFINITIONS E406 @ 1+ VARIABLE EOUTC E436 @ 1+ VARIABLE POUTC 0 VARIABLE ECHR 0 VARIABLE EVTBL F ALLOT ( routine to send character ) ( to both P: & E: ) CODE PPUTC POUTC ) JMP, RTS, C; CODE EPUTC ECHR STA, PHA, TXA, PHA, ECHR LDA, ' PPUTC JSR, PLA, TAX, PLA, EOUTC ) JMP, C; FORTH DEFINITIONS : PON E406 @ 1+ EOUTC ! E436 @ 1+ POUTC ! E400 ' EVTBL F CMOVE ' EPUTC 1- ' EVTBL 6 + ! ' EVTBL 321 ! ; : POFF E400 321 ! ; ;S NOTE: the subroutine EPUTC will drive decompiler crazy, since it cannot find its end. ( RS232 SUPPORT 1/2 ) CODE SIO XSAVE STX, BOT LDA, E459 JSR, ( SIOV) XSAVE LDX, BOT STA, BOT 1+ STY, NEXT JMP, C; : SERR DUP 0< IF 0 100 U/ BASE @ DECIMAL ." SIO ERROR " . BASE ! QUIT ELSE DROP THEN ; CODE DORL XSAVE STX, 506 JSR, HERE 8 + JSR, XSAVE LDX, NEXT JMP, 0C ) JMP, C; : GETR: HERE 2E7 ! ( SET MEMLO ) FLUSH EMPTY-BUFFERS 150 300 ! ( DDEVIC,DUNIT) 403F 302 ! ( ? CMD,EXPCT DATA) 5 306 C! ( TIMEOUT) 500 304 ! ( BUFFER ADDR) 0C 308 ! ( LENGTH ) 0 30A ! ( AUXES ) 0 SIO SERR ( ERRORS?) 500 300 0C CMOVE 0 SIO SERR DORL ( RUN RELOCATOR ) 2E7 @ HERE - ALLOT HERE FENCE ! ; : R1: " R1: " DROP ; ;S ( other words not needed ) --> ( RS232 2/2 ) : R1OPEN 0 8 R1: OPEN ICSTA CH? ; : RYPE -DUP IF 1 IOCB 0B ICCOM C! ICBLL ! ICBAL ! CIO 20 ICCOM C! 0 I1CAX ! CIO ELSE DROP THEN ; : CRR 0A9B SP@ 2 RYPE DROP ; : REMIT SP@ 1 RYPE DROP ; : SET9600 1 IOCB 0E I1CAX ! 24 ICCOM C! R1: ICBAL ! CIO ICSTA CH? ; : LINER SCR @ (LINE) -TRAILING RYPE ; 100 VARIABLE LSPD : LISTR DUP SCR ! CRR " SCR#" RYPE 0 <# #S #> RYPE CRR 10 0 DO I 0 <# # # #> RYPE I LINER CRR LOOP ; ;S ( DISPLAY LIST STUFF 1/1 ) HEX 0 VARIABLE 3BYT 0 VARIABLE DLADR : DINST DLADR @ C@ DUP 0F AND IF DUP 0F AND 1 = IF 40 AND IF ." JVB " ELSE ." JMP " ENDIF DLADR 1+! DLADR @ @ DUP DLADR ! HH 3BYT 0SET ELSE DUP 0F AND 8 OVER < IF ." MAP" ELSE ." CHR" ENDIF 7 AND . DUP 10 AND IF ." H" THEN DUP 20 AND IF ." V" THEN DUP 80 AND IF ." I" ENDIF DUP 0B0 AND IF DUP 40 AND IF ." ," ENDIF ENDIF 40 AND IF 3 DLADR @ 1+ H? ELSE 1 ENDIF 3BYT ! ENDIF ELSE ." BLK" DUP 80 AND IF ." I," ENDIF 70 AND 10 / . 1 3BYT ! ENDIF CR 3BYT @ DLADR +! ; ;S ( PLAYER/MISS.STUFF-RZ 1/1 ) HEX 0 VARIABLE 0VP 64 VARIABLE 0HP 0 VARIABLE 0VPOLD ( : SPB HIMEM @ 1+ F800 AND 800 - DUP Qbase ! 17F + HIMEM ! ; ) : GETPS 0VP ! ROT BLOCK ROT + Qbase @ 400 + 0VP @ + ROT CMOVE ; : SPLAY 0 0 HPOS! 7 GR. SPB Qbase 1+ C@ PMBASE C! 2A 0 COLPM! 0 0 SIZE! 3E D400 C! 3E DMACTL C! 3 GRACTL C! 1C 20 8 64 GETPS ; : CLRPM Qbase @ 800 ERASE ; : MOVEH 0 STICK F XOR C AND DUP IF 2 / 3 - ENDIF 0HP @ + DUP 0HP ! 0 HPOS! ; : VPOS! 0VPOLD @ 9C00 + DUP 9800 8 CMOVE 8 ERASE 9C00 + 9800 SWAP 8 CMOVE ; : MOVEV 0 STICK F XOR 3 AND DUP IF 2 * 3 - ENDIF -DUP IF 0VP @ DUP 0VPOLD ! + DUP 0VP ! VPOS! ENDIF ; : RUNIT BEGIN MOVEH MOVEV 2FC C@ FF = NOT END ; : B/H DUP HEX ." HEX =" . DECIMAL ." DEC.=" . BIN QUIT ; HEX ;S \ 3B DRIVE LINK 1/1 : r/w 301 C@ 1 = IF @ ELSE DROP 0 ENDIF ; : UNLINK EMPTY-BUFFERS DR0 ' r/w CFA ' R/W B1 + ! ; : LINK EMPTY-BUFFERS DR0 ' @ CFA ' R/W B1 + ! ; 1A VAR TMPHYS \ SETS BOTH DRIVES : SETPHYS 1FB5 C@ 1FCE C@ 100 * + TO TMPHYS DUP LSB 1FB5 C! MSB 1FCE C! DR0 ; : RESPHYS TMPHYS @ DUP LSB 1FB5 C! MSB 1FCE C! DR0 ; ;S \ scr# 3C empty block 1/1 ;S ( LINE PRINTER WORDS 1/2 ) ( 0181 SRC ) 3A50 VARIABLE P: CODE PCIO XSAVE STX, 70 # LDX, E456 JSR, XSAVE LDX, TYA, PHA, PUSH JMP, C; 0 VARIABLE LPCNT : PERR? DUP 0< IF FF AND ." P: ERROR " ERROR THEN DROP ; : LPOPEN 3 3B2 C! P: 3B4 ! 2 3B8 ! 8 3BA ! PCIO PERR? ; : LYP1 3B8 ! 3B4 ! 0B 3B2 C! PCIO PERR? ; : LPEMIT SP@ 1 LYP1 DROP ; : LPCR 9B LPEMIT 1 LPCNT +! ; : LYPE DUP IF DUP 50 > IF 1 LPCNT +! THEN LYP1 ELSE DROP DROP THEN 20 SP@ 1 LYP1 DROP ; : CRLP LPCR LPCNT @ 3D > IF LPCR LPCR LPCR LPCR 0 LPCNT ! THEN ; : FFLP CRLP BEGIN LPCNT @ WHILE CRLP REPEAT ; : SHRINK 1B LPEMIT 14 LPEMIT CRLP ; : EXPAND 1B LPEMIT 13 LPEMIT CRLP ; : .CLP 0 <# # # #> LYPE ; : .LP 0 <# #S #> LYPE ; : LINELP DUP .CLP SCR @ (LINE) -TRAILING 1 MAX LYPE CRLP ; 4353 VARIABLE SCR# 2052 , 2023 , : LISTLP DUP SCR ! SCR# 6 LYPE .LP LPCR B/SCR B/BUF * C/L / 0 DO I LINELP LOOP ; --> ( LINE PRINTER WORDS 2/2 ) ( 1/27/81 SRC ) : LPSPC 0 DO 20 LPEMIT LOOP ; : SHOWLP 1+ SWAP C/L 20 = IF DO CRLP SCR# 6 LYPE I .LP 1F LPSPC SCR# 6 LYPE I 1+ .LP CRLP I 20 0 DO DUP SCR ! I .CLP I SCR @ (LINE) LYPE 5 LPSPC DUP 1+ SCR ! I LINELP LOOP DROP 2 +LOOP ELSE DO CRLP I LISTLP LOOP ENDIF FFLP ; : LPINDEX 1+ SWAP DO I .LP 0 I (LINE) -TRAILING LYPE LPCR LOOP ; ;S \ pns TRANSLATOR HES 16SEP82 1/1\ moves screens from drive 2 to \ same place on drive 1. FORTH DEFINITIONS HEX \ Expects byte on TOS : translate ( n --- n ) DUP 0= IF 20 + \ ELSE DUP DUP \ lwr case 60 > SWAP 7B < AND IF 20 - ENDIF ENDIF ; \ Expects buffer address on TOS \ : trnsblk ( adr1 --- ) 3FF 0 DO DUP I + DUP C@ translate SWAP C! LOOP DROP ; \ Expexts source destin scr TOS : PNSCOPY ( n1 n2 --- ) SWAP BLOCK DUP trnsblk SWAP BLOCK 400 CMOVE UPDATE FLUSH ; EDITOR DEFINITIONS : PNS EDLQ SCR @ BLOCK trnsblk UPDATE EDT UL ; FORTH DEFINITIONS : DR2 800 + ; ;S ( FORMATTED LIST PROG. 1/5 ) VOCABULARY FORMY IMMEDIATE FORMY DEFINITIONS BASE @ OCTAL 40 CN SPACBYT 54 CN COMCHR : IARRAY 0 VARIABLE -2 ALLOT ; : 0> DUP 0= IF DROP 0 ELSE 0< 0= THEN ; 0 VARIABLE INDENT 106 CN FCONS 111 CN ICONS 0 VARIABLE TLFLG 0 VARIABLE KERKNT 100 CN MAXLIN : NXSPACE >R 1+ >R 0 R> R> DO SPACBYT I C@ = IF DROP I LEAVE THEN LOOP ; : NXNSPACE >R 1+ >R 0 R> R> DO SPACBYT I C@ = 0= IF DROP I LEAVE THEN LOOP ; : GTNXWD DUP IF + OVER SWAP NXSPACE ELSE DROP THEN DUP IF OVER SWAP NXNSPACE DUP IF OVER OVER NXSPACE DUP IF OVER - ELSE DROP OVER OVER - 1+ THEN ELSE DUP THEN ELSE DUP THEN ; : TORLCR TLFLG @ IF CRLP ELSE CR THEN KERKNT 0SET ; : TORLY DUP 1+ KERKNT +! TLFLG @ IF LYPE ELSE TYPE SPACE THEN ; : DOIND INDENT @ 0> IF INDENT @ 0 DO 0 0 TORLY LOOP THEN ; : PRWORD DUP 1+ KERKNT @ + MAXLIN > IF TORLCR THEN KERKNT @ 0= IF DOIND THEN OVER OVER TORLY ; : 1SET 1 SWAP ! ; --> ( FORMATTED LIST PROG. 2/5 ) : ( 51 WORD 6 ALLOT ; : IA IARRAY ; IA L1G 10 , ( :) ( CODE) ( ,CODE) ( SUBROUTINE) ( IA) ( IARRAY) ( LABEL) ( TBL) IA L2G 2 , ( ;) ( C;) IA L3G 2 , ( NXT,) ( NEXT,) IA L4G 6 , ( IF) ( DO) ( IF,) ( CASE) ( BEGIN) ( BEGIN,) IA L5G 3 , ( ELSE,) ( ELSE) ( WHILE) IA L6G 16 , ( THEN,) ( THEN) ( END,) ( END) ( SOB,) ( BACK) ( UNTIL) ( AGAIN) ( REPEAT) ( ENDIF,) ( UNTIL,) ( LOOP) ( +LOOP) ( ENDIF) IA L7G 7 , ( CONSTANT) ( IR) ( VARIABLE) ( CN) ( ARRAY) ( INTEGER) ( ORCON) IA L8G 1 , ( () IA L9G 3 , ( LD,) ( ST,) ( LOAD) IA LAG 1 , ( ;CODE) : CMPWORD DUP >R C@ OVER = R> SWAP IF >R OVER R> SWAP OVER DUP C@ DUP 4 > IF DROP 4 THEN 0 DO I OVER + 1+ C@ >R OVER R> SWAP I + C@ = 0= IF 0 LEAVE THEN LOOP 0= IF DROP DROP 0 THEN ELSE 0 THEN ; --> ( FORMATTED LIST PROG. 3/5 ) : GSCAN DUP @ SWAP 2+ SWAP 0 DO CMPWORD IF LEAVE 0 ELSE 6 + THEN LOOP IF 0 ELSE DROP 1 THEN ; : NEWCR KERKNT @ IF TORLCR THEN ; : DUPBC OVER >R >R OVER R> SWAP R> ; : FINDCHAR SWAP >R SWAP 1+ R> DO DUP I C@ = IF DROP I LEAVE 0 THEN LOOP IF 0 THEN ; : PRNEWL PRWORD TORLCR ; : >= OVER OVER = IF DROP DROP 1 ELSE > THEN ; --> ( FORMATTED LIST PROG. 4/5 ) : EL1G NEWCR INDENT 0SET PRWORD GTNXWD PRNEWL 10 INDENT ! ; : EL2G NEWCR PRNEWL INDENT 0SET ; : EL3G NEWCR PRNEWL ; : EL4G NEWCR PRNEWL 2 INDENT +! ; : EL5G NEWCR -2 INDENT +! PRNEWL 2 INDENT +! ; : EL6G NEWCR -2 INDENT +! PRNEWL ; : EL7G PRWORD GTNXWD PRNEWL INDENT 0SET ; : EL8G DUPBC 51 FINDCHAR DUP IF SWAP DROP OVER - 1+ PRNEWL ELSE DROP PRWORD THEN ; : EL9G PRNEWL ; : ELAG NEWCR 10 INDENT ! PRNEWL ; : ASSWRD DUP 4 >= IF OVER OVER + 1- C@ COMCHR = IF OVER DUP C@ ICONS = SWAP 1+ C@ FCONS = AND IF 2 ELSE 1 THEN ELSE 0 THEN ELSE 0 THEN ; --> ( FORMATTED LIST PROG. 5/5 ) : PRCWRD L1G GSCAN IF EL1G ELSE L2G GSCAN IF EL2G ELSE L3G GSCAN IF EL3G ELSE L4G GSCAN IF EL4G ELSE L5G GSCAN IF EL5G ELSE L6G GSCAN IF EL6G ELSE L7G GSCAN IF EL7G ELSE L8G GSCAN IF EL8G ELSE L9G GSCAN IF EL9G ELSE LAG GSCAN IF ELAG ELSE ASSWRD IF ASSWRD 2 = IF EL4G ELSE PRNEWL THEN ELSE PRWORD THEN THEN THEN THEN THEN THEN THEN THEN THEN THEN THEN ; : FORLST TORLCR DUP TLFLG @ IF LISTLP ELSE TORLCR LIST THEN TORLCR TORLCR DUP BLK ! BLOCK DUP 1777 + SWAP KERKNT 0SET INDENT 0SET 0 BEGIN GTNXWD DUP IF PRCWRD THEN DUP 0= END DROP DROP DROP BLK 0SET ; : ASTER TORLCR 40 0 DO 52 SP@ 1 TORLY DROP LOOP TORLCR ; : FORSHW 1+ OVER DO ASTER I FORLST TORLCR LOOP DROP ; FORTH DEFINITIONS : FLST FORMY TLFLG 0SET FORLST ; : FLSTLP FORMY TLFLG 1SET FORLST FFLP ; : FSHW FORMY TLFLG 0SET FORSHW ; : FSHWLP FORMY TLFLG 1SET FORSHW FFLP ; ;S ( CASE 1/1 ) FORTH DEFINITIONS HEX : CASE ?COMP CSP @ !CSP 4 ; IMMEDIATE : OF 4 ?PAIRS COMPILE OVER COMPILE = COMPILE 0BRANCH HERE 0 , COMPILE DROP 5 ; IMMEDIATE : ENDOF 5 ?PAIRS COMPILE BRANCH HERE 0 , SWAP 2 [COMPILE] ENDIF 4 ; IMMEDIATE : ENDCASE 4 ?PAIRS COMPILE DROP BEGIN SP@ CSP @ = 0= WHILE 2 [COMPILE] ENDIF REPEAT CSP ! ; IMMEDIATE ;S ( CHARACTERSET SPACE ALLOC 1/1 ) ( HES 82SEP01 ) ( NOTE: THIS SCREEN IS LOCATION DEPENDENT FOR CHRSETSPACE TO WORK ) E000 CONSTANT CH0 ( STD CHAR ) 3400 CONSTANT CH1 ( SET #1 ) 3800 CONSTANT CH2 ( SET #2 ) 3C01 DP ! ( reserve space ) 02F4 C@ VARIABLE CHRST ( storage area of desired set ) BLK @ DUP DUP 1+ BLOCK CH1 400 CMOVE 1+ BLOCK CH2 400 CMOVE ( reserve next two screens ) ( 0 - 2 CHARSET SELECT ) : CHR ( n --- ) CASE 0 OF CH0 ENDOF 1 OF CH1 ENDOF 2 OF CH2 ENDOF ENDCASE 100 / DUP CHRST C! 02F4 C! ; ( PRINT CHAR SET ) : .CHRSET 1 2FE C! FF 0 DO I EMIT LOOP 0 2FE C! CR ; ;S fffffff>`<|fl0fF68of;880  00f< 80 0 ~~`0 0`f``f<ffffbx`bbx``||ff~fff xlxxl```bv~nf`<|<fffff<fff<<f<f`f< |v000|000`~`|fff8<f<`lxxl8<fff`<|~fff;bt8|lf<|~L2~<~~<8x80888ffwffff>`<|fl0fF68of;888>x|f<>>``~pppww``|l`cc>66wwcc0 0 ~~`0 0`ccooo`?33sss~ffgggg`cc~ffwww``pp``pppc`oggssssss n~fflggg000ppp~gwggggwogggccgggccpppccggg~ffwww`ssggggggggggo>gggogsss>ggggggfl7g@`0 xx6c6>8pp8?ww<~~~<x`x`~<~~<0~0 ~ <~~<gc000gg?```??gg?>g~`??gg>|p``~css8<gg<``lnxlg88>fwkcffff>ccc>>3c~``>sc<70pp0c~ l gggg?cc3>ck?7g<D 15 0 DO OVER OVER D+ LOOP SWAP DROP ; : 2@ DUP 2+ @ SWAP @ ; : 2! OVER OVER ! 2+ SWAP DROP ! ; : 2DROP DROP DROP ; : 2DUP OVER OVER ; : 2OVER 4 PICK 4 PICK ; : 2ROT 6 ROLL 6 ROLL ; : 2SWAP 4 ROLL 4 ROLL ; : 2VARIABLE VARIABLE 0 , ; : D0= OR 0= ; : D- DMINUS D+ ; : D= D- D0= ; : D< ROT OVER OVER = IF ROT ROT D- 0< SWAP SWAP ELSE SWAP < SWAP DROP SWAP DROP THEN ; : EXIT COMPILE [COMPILE] ;S ; IMMEDIATE : DMIN 2OVER 2OVER D< IF 2DROP ELSE 2SWAP 2DROP THEN ; : DMAX 2OVER 2OVER D< IF 2SWAP THEN DROP ; ;S ( VAR / VALUE ANTIC,HES1/1 ) 0 VARIABLE TO-FLAG CODE TO ( --- ) 1 # LDA, TO-FLAG STA, NEXT JMP, C; : VAR CONSTANT ;CODE TO-FLAG LDA, 0= IF, 2 # LDY, W )Y LDA, PHA, INY, W )Y LDA, PUSH JMP, ELSE, 0 # LDA, TO-FLAG STA, 0 ,X LDA, 2 # LDY, W )Y STA, 1 ,X LDA, INY, W )Y STA, 0E5D JMP, THEN, C; : VALUE 0 VAR ; ;S ( V1.4S ACCESS WORDS 1/1 ) ( HES ) : SETSYS ( SETS RESET PARAM ) LMARGN @ DUP ( MARGINS ) LSB ' V1.4S 4 + C! MSB ' V1.4S 8 + C! COL1 @ DUP ( COLORS ) LSB ' V1.4S C + C! MSB ' V1.4S 11 + C! COL4 C@ ( BORDER ) LSB ' V1.4S 16 + C! ; : HOOK ( hooks your assembly ) ( routine into WARMSTRT ) ( ->use HOOK word ) [COMPILE] ' ' V1.4S 1+ ! ; : UNHOOK ( restore vector ) E4C0 ' V1.4S 1+ ! ; ;S ( CDUMP / BDUMP 12SEP82 1/1 ) : BDUMP ( Redefined...HES ) 1 2FE C! 1+ SWAP DO I HH SPACE I 8 0 DO DUP I + CH? SPACE LOOP DROP ." " CR 8 +LOOP 0 2FE C! ; : FIX DROP ." " ; : ( For BDUMP ) 10 0 DO SP@ E + I - @ SP@ 12 + @ I 2 / + C! 2 +LOOP ." " DROP DROP DROP DROP DROP DROP FIX DROP DROP QUIT ; ;S ( \ V1.4S HL/HES 12SEP82 1/1 ) : TBL ; : ALLOC DUP + ALLOT ; : ARRAY ; : \ ( Ignores rest of line, used as comment ) IN @ C/L / 1+ C/L * IN ! ; IMMEDIATE ;S Scammell wrote this bit 1985.